<html>
<head>
<title>Remake de Fruity Frank - Version 0.13</title>
<style type="text/css">
span {
	font-family: 'Courier New';
	font-size: 10pt;
	color: #000000;
}
.SpanClass0 {
	color: #808080;
}
.SpanClass3 {
	color: #008080;
}
.SpanClass5 {
	font-weight: bold;
	color: #0000FF;
}
.SpanClass7 {
	color: #808080;
}
.SpanClass10 {
	font-weight: bold;
	color: #000080;
}
.SpanClass11 {
}
</style>
</head>
<body bgcolor="#FFFFFF">
<h2>Remake (parcial) de Fruity Frank... 13 - Migrando a C#</h2>
<p align="right">(Volver al <a href="doc.html">&iacute;ndice</a>) </p>

<p>Antes de seguir ampliando las posibilidades del juego, llega el momento de hacer un cambio dr&aacute;stico: usar otro lenguaje de programaci&oacute;n. Vamos a usar C#, que permite despreocuparnos de ciertos detalles de bajo nivel, y adem&aacute;s nos permitir&aacute; usar una metodolog&iacute;a orientada a objetos para redise&ntilde;ar el juego... dentro de no mucho tiempo.</p>

<p>A pesar de que C# deriva de C, y de que vamos a usar la librer&iacute;a Tao.SDL que deriva de SDL, habr&aacute; que hacer alg&uacute;n que otro cambio.</p>

<p>Como en la versi&oacute;n anterior, crearemos un fichero auxiliar que oculte un poco de SDL, simplifique algunos pasos, y que adem&aacute;s nos traduzca las &oacute;rdenes a espa&ntilde;ol. En este caso, se llama &quot;sdl_n.cs&quot; y se puede ver en la  <a href="http://code.google.com/p/fruityfrank"> p&aacute;gina del proyecto</a>.</p>

<p>Los cambios a nuestro juego, sin ser grandes, son unos cuantos:</p>

<ul>

<li>Todo el programa pasar&aacute; a formar parte de una clase: &quot;public class Juego&quot;. En concreto, como se apoyar&aacute; en la clase auxiliar SdlN, comenzaremos con &quot;public class Juego: SdlN&quot;.</li>

<li>Los datos de nuestros enemigos est&aacute;n en un &quot;struct&quot;; los componentes de este &quot;struct&quot; ahora deben ser public.</li>

<li>Cambia la declaraci&oacute;n del &quot;array&quot; que contiene nuestros enemigos: ahora deber&aacute; ser al estilo de C#: enemigo[] enemigos = new enemigo[NUMENEMIGOS];</li>

<li>El mapa del juego ahora ser&aacute; un &quot;array&quot; de &quot;strings&quot;. Se declara casi igual, pero ahora tendremos una columna menos en MAXCOLS (ya no hace falta dejar un car&aacute;cter adicional para indicar el final de cadena). Por ese mismo motivo, la comprobaci&oacute;n de la columna en la que estamos no acaba en MAXCOLS-2, sino en MAXCOLS-1. De igual modo, como las cadenas en C# no son modificables, ya no podemos alterar el mapa con &quot;mapa1[yPersonaje][xPersonaje] = ' ';&quot;, sino que deberemos usar un &quot;remove&quot; para quitar un car&aacute;cter y luego un &quot;insert&quot; para introducir el nuevo car&aacute;cter en su lugar.</li>

<li>Podemos aprovechar para cambiar el tipo de alguna variable. Por ejemplo, las coordenadas X e Y pueden ser un &quot;short&quot; en vez de un entero de 32 bits. Las componentes R, G y B de un color ser&aacute;n &quot;byte&quot;. Por eso ser&aacute; necesario tambi&eacute;n cambiar algunos datos durante el desarrollo de juegos, forzando una conversi&oacute;n de tipos (&quot;cast&quot;), bien porque aprovechemos datos auxiliares que todav&iacute;a sean &quot;int&quot; y debamos convertir a &quot;short&quot;: datoShort = (short) datoEntero, o bien porque hagamos operaciones y el compilador no tenga la certeza de que el resultado vaya a caber en un entero corto: (short) (xIniPantalla + xPersonaje * anchoCasilla)</li>

<li>Todo el cuerpo del juego lo sacaremos de &quot;Main&quot; para meterlo en una nueva funci&oacute;n, llamada (por ejemplo) &quot;BuclePrincipal&quot;. As&iacute; nuestro &quot;Main&quot; contendr&aacute; apenas 3 &oacute;rdenes: la declaraci&oacute;n de un juego, su presentaci&oacute;n y su bucle principal.</li>

<li>Ya no necesitamos la funci&oacute;n &quot;ColorTransparente&quot;, porque podremos utilizar im&aacute;genes en formato PNG, que incluyan la informaci&oacute;n de transparencia en el propio fichero.</li>

<li>Como peculiaridad de la librer&iacute;a que usaremos (Tao.Sdl), y por no profundizar m&aacute;s por ahora, nuestros tipos de datos SDLA_Imagen* y SDLA_Fuente* ahora pasar&aacute;n a ser un &uacute;nico tipo &quot;IntPtr&quot;.</li>

<li>Todos los SDLA_xxx cambian de nombre, perdiendo ese &quot;SDLA_&quot; del principio, para abreviar un poco y tratar de ganar en legibilidad. Por ejemplo, en vez de &quot;SDLA_teclaPulsada&quot; usaremos &quot;TeclaPulsada&quot;, y &quot;SDLA_dibujarImagenOculta&quot; se convertir&aacute; en &quot;DibujarImagenOculta&quot;.</li>

</ul>


<p>Como siempre, todos los fuentes est&aacute;n en: <a href="http://code.google.com/p/fruityfrank"> code.google.com/p/fruityfrank</a></p>
<p align="right">(Volver al <a href="doc.html">&iacute;ndice</a>) </p>
</body>
</html>
